import { reactive, onMounted, defineComponent, toRefs, getCurrentInstance, ref, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { UploadInstance, UploadProps, UploadUserFile } from 'element-plus'
import orderChangeApi from '@/api/purchase/orderChange-api'
import projectApi from '@/api/inwarehouse/project-api'
import goodsApi from '@/api/inwarehouse/goods-api'
import inventoryApi from '@/api/inwarehouse/inventory-api'
import ZlrtTable from '@/components/zlrt-table/table.vue'
import ZlrtSearch from '@/components/zlrt-search/search.vue'
import TableContext from '@/components/zlrt-table/table-context'
// import * as _ from 'lodash';
// import requestApi from '@/api/purchase/request-api'

export default defineComponent({
  components: {
    ZlrtTable,
    ZlrtSearch
  },
  setup() {
    // const statusOptions = [
    //   { value: '0', label: '新建' },
    //   { value: '99', label: '已完成' },
    //   { value: '100', label: '已同步' }
    // ]

    const ctx = reactive(new TableContext(getCurrentInstance(), {
      title: '物料变更记录',
      api: orderChangeApi,
      columns: [
        // { prop: 'serialId', label: '单号', valueType: 'input' },
        { prop: 'projectName', label: '项目', valueType: 'slot' },
        // { prop: 'locationCode', label: '产品序列号', valueType: 'input' },
        { prop: 'blueprintName', label: '图纸名称', valueType: 'slot' },
        { prop: 'num', label: '套数', slot: true, width: 80 },
        // { prop: 'status', label: '状态', slot: true, valueType: 'select', options: statusOptions },
        { prop: 'operation', label: '操作', slot: true, width: 150 }
      ],

      other: {
        // getStatus(val) {
        //   if (!val) {
        //     return '-'
        //   }
        //   return statusOptions.find(item => {
        //     return item.value === val
        //   }).label
        // },
        // handleSkuChange(val: string, scope) {
        //   const obj = data.goodsOptions.find(item => {
        //     return item.skuName === val
        //   })
        //   const index = orderGoodsCtx.data.findIndex(item => {
        //     return item.barCode === scope.row.barCode
        //   })
        //   orderGoodsCtx.data.splice(index, 1, obj);
        //   data.goodsOptions = [{...obj}];
        // },
        // handelProjectChange(val: string) {
        //   const obj = data.projectOptions.find(item => {
        //     return item.name === val
        //   })
        //   if (!obj) {
        //     return
        //   }
        //   orderCtx.editData.projectId = obj['id']
        //   orderCtx.editData.projectOriginalNo = obj['originalNo']
        // },
        // showEdit(row) {
        //   data.goodsOptions = [];
        //   orderGoodsCtx.data = [];
        //   orderCtx.showEdit(row).then(d => {
        //     orderGoodsCtx.data = orderCtx.editData?.orderGoodsList;
        //   });
        // },
      }
    }));


    // const orderGoodsCtx = reactive(new TableContext(getCurrentInstance(), {
    //   pageSize: 0,
    //   selection: false,
    //   columns: [
    //     { prop: 'skuName', label: '物料名称', slot: true, width: 600 },
    //     { prop: 'barCode', label: '物料编码', width: 150 },
    //     { prop: 'specification', label: '规格型号' },
    //     { prop: 'number', label: '数量', slot: true, width: 90 },
    //     // { prop: 'number1', label: '到货', slot: true },
    //     { prop: 'unit', label: '单位', width: 90 },
    //   ],

    // }))


    // const importCtx = reactive(new TableContext(getCurrentInstance(), {
    //   title: '物料清单',
    //   // searchLoading: false,
    //   pageSize: 0,
    //   selection: false,
    //   expand: true,
    //   defaultExpandAll: true,
    //   rowClassName: "tableRowClassName",
    //   columns: [
    //     // { prop: 'num', label: '序号' },
    //     { prop: 'skuName', label: '物料名称', width: '300', sortable: true },
    //     { prop: 'specification', label: '规格型号' },
    //     { prop: 'total', label: '需求总数', width: '100' },
    //     { prop: 'unit', label: '单位', width: '90' },
    //     { prop: 'remark', label: '备注', width: '200' }
    //   ],
    //   rules: {
    //     projectName: [{ required: true, message: '请选择项目', trigger: 'change' }],
    //     // code: [{ required: true, message: '请输入柜号', trigger: 'blur' }],
    //     // blueprintName: [{ required: true, message: '请输入图纸名称', trigger: 'blur' }],
    //   },

    //   other: {
    //     async getList(scope) {
    //       data.tempInventoryList = []
    //       const res = await inventoryApi.list({filter: {barCode: scope.row.barCode}})
    //       const list = res.data.records;
    //       if(!list || list.length === 0) {
    //         return 
    //       }
    //       const arr = list.filter(item => {
    //         return item.projectId && item.number > 0
    //       })
    //       data.tempInventoryList = arr;
    //     },
    //     // 导入
    //     // import: async (options) => {
    //     //   importCtx.editData = {}
    //     //   importCtx.importLoading = true
    //     //   importCtx.data = []
    //     //   const res = await requirementApi.upload({ file: options.file })
    //     //   importCtx.importLoading = false
    //     //   if (res.data && res.data.length > 0) {
    //     //     importCtx.data = res.data
    //     //     importCtx.editVisible = true

    //     //     //姚宝杰非要需求数量自己带出来
    //     //     res.data?.map(o => {
    //     //       o.searchSkuName = o.skuName;
    //     //       o.searchSpecification = o.specification;
    //     //       o.goodsList?.map(x => {
    //     //         x.needNumber = o.number;

    //     //       });
    //     //     })
    //     //   }
    //     //   importCtx.importFiles = [];
    //     // },
    //     importMultiple: async (options) => {
    //       importCtx.editData = {}
    //       importCtx.importLoading = true
    //       importCtx.data = []
    //       const res = await requirementApi.uploadMultiple({ file: options.file })
    //       importCtx.importLoading = false
    //       if (res.data && res.data.length > 0) {
    //         data.requirementList = res.data;
    //         const tempArr = [];
    //         data.requirementList.map(item => {
    //           item['blueprintName'] = importCtx.other.getBlueprintName(item.boxName);
    //           item['boxNum'] = importCtx.other.getBoxNum(item['blueprintName']);
    //           const lstOrder = item.lstOrder;
    //           lstOrder.map(lst => {
    //             const index = tempArr.findIndex(ta => {
    //               return lst.skuName === ta.skuName && lst.specification === ta.specification && lst.remark === ta.remark
    //             })
    //             if(index === -1) {
    //               lst['total'] = lst.number * item['boxNum'];
    //               tempArr.push(lst)
    //             } else {
    //               tempArr[index].total = (tempArr[index].total * 1000 + lst.number * item['boxNum'] * 1000) / 1000;
    //             }
    //           })
    //         })
    //         importCtx.data = JSON.parse(JSON.stringify(tempArr))
    //         importCtx.editVisible = true
    //         importCtx.data.map(item => {
    //           item['searchSkuName'] = item['skuName'];
    //           item['searchSpecification'] = item['specification'];
    //           // importCtx.other.searchSku(item)
    //         })
    //         // //姚宝杰非要需求数量自己带出来
    //         // res.data?.map(o => {
    //         //   o.searchSkuName = o.skuName;
    //         //   o.searchSpecification = o.specification;
    //         //   o.goodsList?.map(x => {
    //         //     x.needNumber = o.number;

    //         //   });
    //         // })
    //       }
    //       importCtx.importFiles = [];
    //     },
    //     getBlueprintName(name){
    //       if(!name){
    //         return ''
    //       }
    //       const tempName = name.replace(/:/g, '：')
    //       const arr1 = tempName.split('编号：')
    //       const arr2 = arr1[1].split('数量：')
    //       return arr2[0].trim()
    //     },
    //     getBoxNum(str) {
    //       if(!str) {
    //         return 
    //       }
    //       let arr = []
    //       if(str.indexOf('/') > -1) {
    //         arr = str.split('/');
    //       } else if(str.indexOf(';') > -1) {
    //         arr = str.split(';');
    //       } else if(str.indexOf(',') > -1) {
    //         arr = str.split(',');
    //       } else if(str.indexOf('、') > -1) {
    //         arr = str.split('、');
    //       } else {
    //         arr.push(str)
    //       }
    //       return arr.length
    //     },
    //     handelProjectChange(val: string) {
    //       const obj = data.projectOptions.find(item => {
    //         return item.name === val
    //       })
    //       if (!obj) {
    //         return
    //       }
    //       importCtx.editData.projectId = obj.id
    //       importCtx.editData.projectName = obj.name
    //       importCtx.editData.projectOriginalNo = obj.originalNo
    //     },
    //     submit: async () => {
    //       await importCtx.formRef.validate(async validated => {
    //         if (!validated) {
    //           document.getElementById("import-top").scrollIntoView();
    //           return;
    //         }
    //         if (!importCtx.editData.projectOriginalNo) {
    //           ElMessage.warning('项目没有合同号');
    //           return;
    //         }
    //         // var code = importCtx.editData.code.replaceAll("，", ",").split(",").map(o => o.trim()).filter(o => o).join(",");
    //         // if (!code) {
    //         //   ElMessage.warning('请输入柜号');
    //         //   return;
    //         // }
    //         // const needMore = importCtx.data.filter(o => o.number != _.sumBy(o.goodsList, (x: any) => x.needNumber ? parseFloat(x.needNumber) : 0));
    //         // if (needMore?.length) {
    //         //   ElMessage.warning('请检查需求数量 ' + needMore.map(o => o.skuName).join(' , '));
    //         //   return;
    //         // }
    //         // code = code.split(',').map(o => `${importCtx.editData.projectOriginalNo}-${o}`).join(",");

    //         importCtx.data.map(item => {
    //           const arr = item.goodsList?.filter(gl => gl.needNumber && gl.needNumber > 0);
    //           if(arr && arr.length > 0) {
    //             const goodsList = JSON.parse(JSON.stringify(arr))
    //             const lstArr = [];
    //             data.requirementList.map(rml => {
    //               const boxNum = rml.boxNum;
    //               const lstOrder = rml.lstOrder;
    //               lstOrder.map(lst => {
    //                 if(lst.skuName === item.skuName && lst.specification === item.specification && lst.remark === item.remark) {
    //                   lst['boxNum'] = boxNum;
    //                   lstArr.push(lst)
    //                 }
    //               })
    //             })
    //             lstArr.map(la => {
    //               goodsList.map(gl => {
    //                 // 输入的需求数量 gl['needNumber']
    //                 // 同一图纸中每个物料单柜号需求数量 la.number / goodsList.length
    //                 // 同一图纸中每个物料总柜号需求数量 (la.number / goodsList.length) * la.boxNum
    //                 gl['number'] = la.number / goodsList.length;
    //                 gl['goodsId'] = gl['id'];
    //                 // delete gl['needNumber'];
    //                 // delete gl['inventoryList'];
    //                 // delete gl['id']
    //               })
    //               la.goodsList = goodsList;
    //             })
    //           }
    //         })

    //         ElMessageBox.confirm(`确认当前已选数据生成物料清单？`, '温馨提示', {
    //           confirmButtonText: '确定',
    //           cancelButtonText: '取消',
    //           type: 'warning',
    //           draggable: true
    //         })
    //           .then(async () => {
    //             // const arr = importCtx.data.map(item => {
    //             //   item.goodsId = item.id;
    //             //   item.id = null;
    //             //   return item;
    //             // });
    //             // const requirementGoodsList = _.flatMap(importCtx.data, "goodsList").filter(o => o.needNumber).map(x => {
    //             //   const o = _.clone(x);
    //             //   o.goodsId = o.id;
    //             //   o.id = null;
    //             //   o.number = o.needNumber;
    //             //   o.number1 = 0;
    //             //   return o;
    //             // });
    //             const paramsArr = [];
    //             const requestGoodsList = [];
    //             const blueprintArr = [];
    //             data.requirementList.map(rml => {
    //               blueprintArr.push(rml.blueprintName);
    //               const lstOrder = rml.lstOrder;
    //               let orderGoodsList = [];
    //               lstOrder.map(lo => {
    //                 if(lo.goodsList && lo.goodsList.length > 0) {
    //                   const ogl = JSON.parse(JSON.stringify(lo.goodsList));
    //                   ogl.map(gl => {
    //                     delete gl['id'];
    //                     delete gl['needNumber'];
    //                     orderGoodsList.push(gl)
    //                   })
    //                 }
    //               })
    //               if(orderGoodsList && orderGoodsList.length > 0) {
    //                 const arr = []
    //                 orderGoodsList.map(ogl => {
    //                   const index = arr.findIndex(ar => {
    //                     return ar.barCode === ogl.barCode
    //                   })
    //                   if(index === -1) {
    //                     arr.push(ogl);
    //                     // requestGoodsList.push(ogl);
    //                   } else {
    //                     arr[index].number = (arr[index].number * 1000 + ogl.number * 1000) / 1000;
    //                     // requestGoodsList[index].requestNumber = (requestGoodsList[index].requestNumber * 1000 + ogl.requestNumber * 1000) / 1000;
    //                   }
    //                   const _index = requestGoodsList.findIndex(rgl => {
    //                     return rgl.barCode === ogl.barCode
    //                   })
    //                   if(_index === -1) {
    //                     requestGoodsList.push(ogl)
    //                   }
    //                 })
    //                 const requirementParams = {
    //                   ...importCtx.editData,
    //                   blueprintName: rml.blueprintName,
    //                   orderGoodsList: arr
    //                 }
    //                 paramsArr.push(requirementParams);
    //               }
    //             })

    //             paramsArr?.map((params, index) => {
    //               data.finishLoading = true;
    //               requirementApi.batchSave(params).then(res => {
    //                 if (res.success && index === paramsArr.length - 1) {
    //                   data.finishLoading = false;
    //                   orderCtx.loadData()
    //                   ElMessage.success('新增成功')
    //                   importCtx.editVisible = false
    //                 };
    //               });
    //             })

    //             if(requestGoodsList.length > 0) {
    //               const tempArr = [];
    //               requestGoodsList.map(rgl => {
    //                 const obj = JSON.parse(JSON.stringify(rgl));
    //                 if(obj['requestNumber'] > 0) {
    //                   obj['number'] = obj['requestNumber'];
    //                   delete obj['requestNumber'];
    //                   tempArr.push(obj);
    //                 }
    //               })
    //               const requestParams = {
    //                 ...importCtx.editData,
    //                 blueprintName: JSON.stringify(blueprintArr),
    //                 status: '0',
    //                 date: new Date(),
    //                 orderGoodsList: tempArr
    //               }
    //               requestApi.save(requestParams)
    //             }

    //             // const requirementParams = {
    //             //   ...importCtx.editData,
    //             //   // locationCode: code,
    //             //   orderGoodsList: requirementGoodsList
    //             // };
    //             // requirementApi.batchSave(requirementParams).then(res => {
    //             //   if (res.success) {
    //             //     ElMessage.success('新增成功')
    //             //     orderCtx.loadData()
    //             //     importCtx.editVisible = false
    //             //   };
    //             // });


    //             // const requestGoodsList = _.flatMap(importCtx.data, "goodsList").filter(o => o.requestNumber).map(x => {
    //             //   const o = _.clone(x);
    //             //   o.goodsId = o.id;
    //             //   o.id = null;
    //             //   o.number = o.requestNumber;
    //             //   o.number1 = 0;
    //             //   return o;
    //             // });
    //             // if (requestGoodsList?.length) {
    //             //   const requestParams = {
    //             //     ...importCtx.editData,
    //             //     status: '0',
    //             //     date: new Date(),
    //             //     orderGoodsList: requestGoodsList
    //             //   }
    //             //   requestApi.save(requestParams)
    //             // }

    //             // if (res.code === 200) {
    //             //   ElMessage.success('新增成功')
    //             //   ctx.loadData()
    //             //   data.requirementDialog = false
    //             // }

    //           })
    //           .catch()
    //       });

    //     },
    //     searchSku: async (row) => {
    //       importCtx.searchLoading = true;
    //       const res = await goodsApi.list({ current: 1, size: 30, otherFilter: { skuName: row.searchSkuName, specification: row.searchSpecification } });
    //       importCtx.searchLoading = false;
    //       if (res.success) {
    //         row.goodsList = res.data.records;
    //         // row.goodsList.map(item => {
    //         //   getInventoryList(item)
    //         // })
    //       }
    //     },
    //     getData(data) {
    //       if(!data || data.length === 0) {
    //         return []
    //       }
    //       return data
    //     }
    //   }
    // }))

    // const getInventoryList = async (item) => {
    //   const params = { filter: { barCode: item.barCode } }
    //   const res = await inventoryApi.list(params)
    //   const inventoryList = res.data.records;
    //   const arr = [];
    //   inventoryList?.map(il => {
    //     if(il.projectId && il.number) {
    //       arr.push({ id: il.id, projectName: il.projectName, number: il.number, unit: il.unit })
    //     }
    //   })
    //   item.inventoryList = arr
    // }

    const getProjectList = async () => {
      const params = { filter: { disabled: false } }
      const res = await projectApi.list(params)
      data.projectOptions = res.data.records
    }

    // const getGoodsList = async (val: string) => {
    //   data.loading = true;
    //   const params = { otherFilter: { skuName: val } }
    //   const res = await goodsApi.list(params)
    //   data.loading = false;
    //   data.goodsOptions = res.data.records;
    // }



    const data = reactive({
      // getGoodsList,
      ctx,
      // orderGoodsCtx,
      // importCtx,
      projectOptions: [],
      // loading: false,
      // goodsOptions: [],
      // requirementList: [],
      // finishLoading: false,
      // tempInventoryList: []
    })

    // init
    onMounted(() => {
      getProjectList()
      ctx.loadData()
    })

    return {
      ...toRefs(data)
    }
  }
})
